package com.vviton.zyhj.content;

import java.lang.reflect.InvocationTargetException;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.web.client.RestTemplate;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.vviton.zyhj.common.base.AppConfig;
import com.vviton.zyhj.common.content.SpringContext;
import com.vviton.zyhj.common.view.ViewZzjgdm;
import com.wdcloud.login.client.session.SessionUserHolder;

/**
 * ClassName: CommonConstants <br/>
 * Function: 公共常量定义. <br/>
 * Date: 2016年4月14日 下午9:26:28 <br/>
 *
 * @author weiming.chen
 * @version 1.0
 * @since 1.0
 */
public abstract class CommonConstants {

    /** 日志记录 */
    private static Logger logger = Logger.getLogger(CommonConstants.class);

    /** 业务域-伟东： 000000 */
    public static final String YWY_WD = "000000";

    /** 积分账户类型 01 消费者 **/
    public static final String JFZHLX_XFZ = "01";
    /** 积分账户类型 02 合作方 **/
    public static final String JFZHLX_HZF = "02";

    /** 行为 */
    public static final String XW = "XW";
    /** 行为 15 积分兑换 */
    public static final String XW_JFDH = "15";
    /** 行为 16 积分提现 */
    public static final String XW_JFTX = "16";
    //====新增行为=====
    /** 行为 01 登录 */
    public static final String XW_DL = "01";

    /** 行为 02 签到 */
    public static final String XW_QD = "02";

    /** 行为 03 收藏产品 */
    public static final String XW_SCCP = "03";

    /** 行为 04 收藏合作方 */
    public static final String XW_SCHZF = "04";

    /** 行为 05 购买产品 */
    public static final String XW_GMCP = "05";

    /** 行为 06 产品评价 */
    public static final String XW_CPPJ = "06";

    /** 行为 07 满意度评价 */
    public static final String XW_MYDPJ = "07";

    /** 行为 08 晒单 */
    public static final String XW_SD = "08";

    /** 行为 09 完善资料 */
    public static final String XW_WSZL = "09";

    /** 行为 10 分享主页 */
    public static final String XW_FXZY = "10";

    /** 行为 11 分享产品 */
    public static final String XW_FXCP = "11";

    /** 行为 12 消费者信誉评价 */
    public static final String XW_XYPJ = "12";

    /** 行为 13 发布产品 */
    public static final String XW_FBCP = "13";

    /** 行为 14 逆向交易 */
    public static final String XW_NXJY = "14";

    /**
     * @Desc 实体Bean 浅copy
     * @Author weiming.chen
     * @Date 2016年1月19日 下午4:19:48
     * @param dest 目标对象
     * @param orig 源对象
     * @return 是否拷贝成功
     */
    public static boolean copyProperties(Object dest, Object orig) {
        try {
            ConvertUtils.register(new DateLocaleConverter(), java.util.Date.class);
            BeanUtils.copyProperties(dest, orig);
            return true;
        } catch (IllegalAccessException | InvocationTargetException e) {
            return false;
        }
    }

    /**
     *
     * getRyzh,获取人员账号(平台或者消费者或者第三方). <br/>
     * Author: weiming.chen <br/>
     * Create Date: 2016年11月15日 <br/>
     * ===============================================================<br/>
     * Modifier: weiming.chen <br/>
     * Modify Date: 2016年11月15日 <br/>
     * Modify Description: <br/>
     * ===============================================================<br/>
     *
     * @param req 请求对象
     * @return 人员账号
     * @since JDK 1.7
     */
    public static String getRyzh(HttpServletRequest req) {
        SessionUserHolder sessionUserHolder = SpringContext.getBean(SessionUserHolder.class);
        String zh = sessionUserHolder.getLoginId(req);
        logger.info("获取到的用户账号为:" + zh);
        return zh;
    }

    /**
     *
     * getHyxx,获取人员账号信息(平台或者消费者或者第三方). <br/>
     * Author: weiming.chen <br/>
     * Create Date: 2016年11月15日 <br/>
     * ===============================================================<br/>
     * Modifier: weiming.chen <br/>
     * Modify Date: 2016年11月15日 <br/>
     * Modify Description: <br/>
     * ===============================================================<br/>
     *
     * @param req 请求对象
     * @return 人员账号
     * @since JDK 1.7
     */
    public static SessionHyxx getHyxx(HttpServletRequest req) {
        SessionUserHolder sessionUserHolder = SpringContext.getBean(SessionUserHolder.class);
        String zh = sessionUserHolder.getLoginId(req);
        String nickName = sessionUserHolder.getRealNickName(req);
        String hytx = "";
        if (StringUtils.isEmpty(nickName)) {
            AppConfig appConfig = SpringContext.getBean(AppConfig.class);
            RestTemplate template = new RestTemplate();
            String hyxxStr = template.getForObject(appConfig.getUrlGetUserInfo() + zh, String.class);
            RESTFulHyxx hyxxtemp = JSONObject.toJavaObject(JSON.parseObject(hyxxStr), RESTFulHyxx.class);
            if (hyxxtemp != null) {
                nickName = hyxxtemp.getRealnickname();
                hytx = hyxxtemp.getYhtx();
            }
        }
        SessionHyxx hyxx = new SessionHyxx();
        hyxx.setZh(zh);
        hyxx.setHync(nickName);
        hyxx.setHytx(hytx);
        return hyxx;
    }

    /**
     *
     * getCmsorgcode,(通过rest_url方式获取组织机构代码cmsorgcode). <br/>
     * Author: libo <br/>
     * Create Date: 2017年3月31日 <br/>
     * ===============================================================<br/>
     * Modifier: libo <br/>
     * Modify Date: 2017年3月31日 <br/>
     * Modify Description: <br/>
     * ===============================================================<br/>
     *
     * @param domain 域名
     * @return String 组织机构代码
     * @since JDK 1.7
     */
    public static String getCmsorgcode(String domain) {
        RestTemplate restTemplate = new RestTemplate();
        AppConfig appConfig = SpringContext.getBean(AppConfig.class);
        String url = appConfig.getUrlGetCmsorgcode() + "?domain=" + domain;
        String result = "";
        try {
            String cmsorgcode = restTemplate.getForObject(url, String.class);
            if (StringUtils.isNotBlank(cmsorgcode)) {
                ViewZzjgdm zzjgdm = JSONObject.toJavaObject(JSON.parseObject(cmsorgcode), ViewZzjgdm.class);
                if (zzjgdm != null) {
                    result = zzjgdm.getCmsorgcode();
                }
            }
        } catch (Exception e) {
            logger.info(e.getMessage());
        }
        return result;
    }

}
